/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Ventas.Controlador;


import CharliesCookies.MainController;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import com.dp1.pucp.Modelo.Clases.Cliente;
import com.dp1.pucp.Modelo.Clases.Lineapedidoproducto;
import com.dp1.pucp.Modelo.Clases.Pedidoproducto;
import com.dp1.pucp.Seguridad.DAO.LogDAO;
import com.dp1.pucp.Util.Validaciones;

import com.dp1.pucp.Ventas.DAO.*;
import com.dp1.pucp.Ventas.Controlador.*;
import com.dp1.pucp.Ventas.VIsta.*;

import java.util.ArrayList;
import java.util.Date;
import javax.swing.JOptionPane;

/**
 *
 * @author Lucia
 */
public class PedidoProdControlador {

   private PedidoProdDAO dao;
   public PedidoProdGUI pedidoProdGUI;
   private Pedidoproducto pedidoProd;
   
   public ArrayList<Lineapedidoproducto> pedidos = new ArrayList<>();

    public PedidoProdControlador(PedidoProdDAO dao, PedidoProdGUI view, Pedidoproducto pedidoProd ) {
        
        this.dao = dao;
        this.pedidoProdGUI = view;
        this.pedidoProd = pedidoProd;
        

        pedidoProdGUI.addGuardarListener(new guardarPedidoProdListener());
        pedidoProdGUI.addLimpiarListener(new limpiarPedidoProdListener());
        pedidoProdGUI.addCancelarListener(new cancelarPedidoProdListener());
        pedidoProdGUI.addAgregarProdListener(new agregarProdListener(this));
        pedidoProdGUI.addEliminarProdListener(new eliminarProdListener());
        
        pedidoProdGUI.llenaComboCliente(dao.listarClientes());
        pedidoProdGUI.llenaComboEstado(dao.listarEstado());
        
        pedidoProdGUI.setFormProducto(pedidoProd);
       
        pedidos = dao.listarLineasPedidoProd(pedidoProd);
        
        pedidoProdGUI.listarPedidosGrilla(pedidos);
       

    }
    
     public void llamarListarPedidosGrilla(){
         pedidoProdGUI.listarPedidosGrilla(this.pedidos);
     } 
     
     public void calcularTotal(){
         float total=0;
         for (int i=0; i<pedidos.size();i++){
             total+= pedidos.get(i).getCantidad()*pedidos.get(i).getPUnitario();
             
         }
         pedidoProdGUI.setTotal(total);
     }
   
     class guardarPedidoProdListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            
            boolean esNuevo=true;
            
            Date fechaEnt = pedidoProdGUI.getFechaAEnt(); boolean flagFechaEnt = false;
            Float total = pedidoProdGUI.getTotal(); boolean flagTotal =false;
            
            if (fechaEnt==null) flagFechaEnt=true;
            if (total==0) flagTotal=true;
            
            if(flagFechaEnt||flagTotal){
                Validaciones.mostrarMensajeErrorVal("Llene los campos correctamente");
                return;
            }
                
             
            Pedidoproducto p = new Pedidoproducto();
            
            Cliente cliente = new Cliente();
            p.setCliente(pedidoProdGUI.getCliente());
            p.setEstado(1);
            p.setFechaRegistro(pedidoProdGUI.getFechaRegistro());
            p.setFechaEntrega(pedidoProdGUI.getFechaAEnt());
            p.setTotal(pedidoProdGUI.getTotal());
            p.setMotivo(pedidoProdGUI.getMotivo());
            
            if (pedidoProd != null) {
                p.setIdpedidoproducto(pedidoProd.getIdpedidoproducto());
                esNuevo=false;
            }
            
                       
            Pedidoproducto nuevo =dao.guardarPedidoProd(p);
            
            //en pedidos estan los productos actualizados, entonces hay que borrar los existentes y crear unos nuevos
            
            //listar pedidos existentes
            ArrayList<Lineapedidoproducto> lista = new ArrayList<>();
            lista = dao.listarLineasPedidoProd(nuevo);
            
            //eliminar todos los pedidos registrados hasta el momento
            if (lista!=null)
                for (int i=0; i<lista.size();i++){
                  dao.eliminarLineaPedidoProd(lista.get(i));
                }
              
            //guardar en la BD la nueva lista de productos
            for (int i=0; i<pedidos.size();i++){
                pedidos.get(i).setIdlineapedidoproducto(0);
                pedidos.get(i).setPedidoproducto(nuevo);
                dao.guardarLineaPedidoProd(pedidos.get(i));
            }
            pedidoProdGUI.dispose();
            
            if (esNuevo){
                Validaciones.mostrarMensajeAvisoVal("El Pedido de Producto ha sido creado correctamente.");
                LogDAO.insertarLog(MainController.usuario, "Agregar Pedido de Producto");
            }
            else{
                Validaciones.mostrarMensajeAvisoVal("El pedido de producto ha sido modificado correctamente.");
                LogDAO.insertarLog(MainController.usuario, "Editar Pedido de Producto");
            }
            
        }
    }
     class limpiarPedidoProdListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            pedidoProdGUI.LimpiarDatos();
            int tam = pedidos.size();
           for (int i=0; i<tam;i++){
                 
                pedidos.remove(0);
           }
            pedidoProdGUI.listarPedidosGrilla(pedidos);
          
            

        }
     }
     class cancelarPedidoProdListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            pedidoProdGUI.dispose();
             if (pedidoProd!=null)
                LogDAO.insertarLog(MainController.usuario, "Salir Editar Pedido de Producto");
            else
                LogDAO.insertarLog(MainController.usuario, "Salir Agregar Pedido de Producto");
        }
    }
     
     class agregarProdListener implements ActionListener{
         
         PedidoProdControlador pedidoProdControlador;
       
         agregarProdListener (PedidoProdControlador pedidoProdControlador){
             this.pedidoProdControlador = pedidoProdControlador;
         }
         @Override
         public void actionPerformed(ActionEvent e){
             //crear nueva ventana de agrgarProducto
             ProdxOrdenPedidoGUI prodGUI = new ProdxOrdenPedidoGUI(this.pedidoProdControlador.pedidoProdGUI, true);
             //Crear controlador de ventana de nuevo producto
              //pasarle el dao, la ventana, y el controlador actual
             ProdxOrdenPedidoControlador prodControlador = new ProdxOrdenPedidoControlador(this.pedidoProdControlador.dao, prodGUI, this.pedidoProdControlador ); 
             prodGUI.setVisible(true);
            
         }
     }
     
    
     
     class eliminarProdListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
         
            int sel = pedidoProdGUI.getFilaSel();
            if (sel != -1) {
                Lineapedidoproducto l = pedidos.get(sel);
                pedidos.remove(sel);
                calcularTotal();
                pedidoProdGUI.listarPedidosGrilla(pedidos);
            }
        }
    }
}
    
    


   


